
//!!!!作用域   
//!!!!标识符

// //函数作用域
// var a = 2

// // function foo() {        //作用域污染问题            用过foo这个单词之后，再也不能用foo这个单词去干别的，因为会覆盖这里的foo，这就是污染
// //     var a = 3
// // }

// //解决作用域污染问题        
// //!!!!自执行函数
// (function () {
//     var a = 3
// })()            //注意这里有括号,这个括号是调用function，实现自执行函数



// foo()
// console.log(a);//输出2      //自执行函数结果也为2  

// let arr = []                            //下面的for循环执行完之后，这里相当于变成       let arr = [function(){console.log(i);}]  放入十个函数！！！！并没有执行！！当for执行完之后，i=10跳出
// for(var i = 0;i<10;i++){        //用var定义的i，会实现  声明提升！
//     arr[i] = function () {
//         console.log(i);
//     }
// }

// // for(i=0;i<10;i++){               //这里是打印10 10 10 .........十个10
//     arr[i] = function () {
//         console.log(i);
//     }
// }


//!!!!!块级作用域
// for(let i=0;i<10;i++){
//     arr[i] = function () {
//         console.log(i);
//     }
// }

function test() {
    var arr = []
    for (var i = 0; i < 10; i++) {
      (function(j) {                    //在这个自执行函数里面，可以这么理解：
        arr[j] = function() {
          console.log(j);
        }
      })(i)
    }
    return arr
  }
  
  var myArr = test()
  
  
  
  for (var j = 0; j < 10; j++) {
    myArr[j]()
  }

